package com.errol.generic.file.excel.pojo;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by Errol1017 on 2018/6/13.
 * excel 映射字段注解，只有用该注解定义了的字段，才会参与映射
 * 被注解定义的字段必须有 getter 和 setter 方法
 * 目前支持的字段类型如下：
 * 注意：因为 excel 单元格可能为空，因此必须使用包装类
 * <ul>
 * <li>String</li>
 * <li>Integer</li>
 * <li>Long</li>
 * <li>Float</li>
 * <li>Double</li>
 * <li>Boolean | 将映射为 "是" 和 "否"</li>
 * <li>Date | 将使用 {@link com.renjia.service.generic.base.util.DateFormatUtil} 转换为时间字符串</li>
 * <li>Enum | 枚举类读 excel 时使用 {@link ExcelColConfig#dynamic()} 进行中文和枚举值（Enum.name()）的映射；写 excel 时直接输出枚举值（Enum.name()）</li>
 * <li>javabean | javabean 作 filed ，表头部分将映射为两行，第一行为合并列，第二行为 javabean 中的 field</li>
 * <li>建议使用内部类，以保证良好的封装，理论上支持任意层级数</li>
 * </ul>
 *
 * @author zhang xiao bin
 * @version v1.0
 * @date 2020/10/21
 * @since v4.7.6
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelColConfig {

    /**
     * excel 列的表头
     */
    String title();

    /**
     * 用于 filed 的排序，按从小到大的顺序
     */
    int order();

    /**
     * 是否替换掉单元格 内容中 空格符（' '），是否替换首尾空格及内容中占位符由 {@link ExcelConfig#trim()} 控制
     */
    boolean compact() default true;

    /**
     * 时间转换格式，当 filed 为 date 类型时，必须是 {@link com.renjia.service.generic.base.util.DateFormatUtil} 中的 PATTERN
     */
    String datePattern() default "";

    /**
     * 验证动态生成的数据，用于验证的值在读取excel 时作 dynamics 参数传入，Map<String, String>（map.containsKey()） 类型
     */
    String dynamic() default "";
}
